package chapter05.s08regexp.bak;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

//2. Matcher类
//        Matcher类用于在给定的Pattern实例的模式控制下 进行字符串的匹配工作

//索引方法 提供了有用的索引值，精确表明输入字符串中在哪能找到匹配：
//1	public int start() 返回以前匹配的初始索引。
//2	public int start(int group)返回在以前的匹配操作期间，由给定组所捕获的子序列的初始索引
//3	public int end()返回最后匹配字符之后的偏移量。
//4	public int end(int group) 返回在以前的匹配操作期间，由给定组所捕获子序列的最后字符之后的偏移量。

//查找方法 用来检查输入字符串并返回一个布尔值，表示是否找到该模式：
//1	public boolean lookingAt() 尝试将从区域开头开始的输入序列与该模式匹配。
//2	public boolean find() 尝试查找与该模式匹配的输入序列的下一个子序列。
//3	public boolean find(int start）重置此匹配器，然后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列。
//4	public boolean matches() 尝试将整个区域与模式匹配。

public class Example29 {
    public static void main(String[] args) {
        Pattern p = Pattern.compile("\\d+");
        Matcher m = p.matcher("22bb23");    // 由Pattern实例获取Matcher
        System.out.println("字符串是否匹配:" + m.matches());

        Matcher m2 = p.matcher("2223");
        System.out.println("字符串是否匹配:" + m2.matches());
        System.out.println("对前面的字符串匹配结果为" + m.lookingAt());

        Matcher m3 = p.matcher("aa2223");
        System.out.println("对前面的字符串匹配结果为:" + m3.lookingAt());
        m.find();//返回true
        System.out.println("字符串任何位置是否匹配:" + m.find());
        m3.find();//返回true
        System.out.println("字符串任何位置是否匹配:" + m3.find());

        Matcher m4 = p.matcher("aabb");
        System.out.println("字符串任何位置是否匹配:" + m4.find());

        Matcher m1 = p.matcher("aaa2223bb");
        m1.find();//匹配2223
        System.out.println("上一个匹配的起始索引::" + m1.start());
        System.out.println("最后一个字符匹配后的偏移量" + m1.end());
        System.out.println("匹配到的子字符串:" + m1.group());
    }
}
